package com.kkarma.util;

import com.kkarma.constant.HttpStatus;
import org.springframework.util.StringUtils;

import java.util.HashMap;

/**
 * @Author: karma
 * @Date: 2022/3/30 0030 - 03 - 30 - 12:00
 * @Description: com.kkarma.util
 * @version: 1.0
 */
public class ResponseWrapper extends HashMap<String, Object> {

    private static final long serialVersionUID = -6683011604280499891L;

    /** 自定义状态码 */
    public static final String CUSTOM_CODE = "code";

    /** 自定义消息内容 */
    public static final String CUSTOM_MSG = "msg";

    /** 返回结果数据 */
    public static final String CUSTOM_DATA = "data";

    /**
     * 空参构造器
     */
    public ResponseWrapper() { }

    /**
     * 有参构造器返回自定义状态码和自定义消息提示内容
     *
     * @param code 状态码
     * @param msg 返回内容
     */
    public ResponseWrapper(int code, String msg)
    {
        super.put(CUSTOM_CODE, code);
        super.put(CUSTOM_MSG, msg);
    }

    /**
     * 有参构造器返回自定义状态码、自定义消息提示内容及响应数据内容
     *
     * @param code 状态码
     * @param msg 返回内容
     * @param data 数据对象
     */
    public ResponseWrapper(int code, String msg, Object data)
    {
        super.put(CUSTOM_CODE, code);
        super.put(CUSTOM_MSG, msg);
        if (!StringUtils.isEmpty(data))
        {
            super.put(CUSTOM_DATA, data);
        }
    }

    /**
     * 返回成功消息
     *
     * @return 成功消息
     */
    public static ResponseWrapper success()
    {
        return ResponseWrapper.success("操作成功");
    }

    /**
     * 返回成功数据
     *
     * @return 成功消息
     */
    public static ResponseWrapper success(Object data)
    {
        return ResponseWrapper.success("操作成功", data);
    }

    /**
     * 返回成功消息
     *
     * @param msg 返回内容
     * @return 成功消息
     */
    public static ResponseWrapper success(String msg)
    {
        return ResponseWrapper.success(msg, null);
    }

    /**
     * 返回成功消息
     *
     * @param msg 返回内容
     * @param data 数据对象
     * @return 成功消息
     */
    public static ResponseWrapper success(String msg, Object data)
    {
        return new ResponseWrapper(HttpStatus.SUCCESS, msg, data);
    }

    /**
     * 返回错误消息
     *
     * @return
     */
    public static ResponseWrapper error()
    {
        return ResponseWrapper.error("操作失败");
    }

    /**
     * 返回错误消息
     *
     * @param msg 返回内容
     * @return 警告消息
     */
    public static ResponseWrapper error(String msg)
    {
        return ResponseWrapper.error(msg, null);
    }

    /**
     * 返回错误消息
     *
     * @param msg 返回内容
     * @param data 数据对象
     * @return 警告消息
     */
    public static ResponseWrapper error(String msg, Object data)
    {
        return new ResponseWrapper(HttpStatus.ERROR, msg, data);
    }

    /**
     * 返回错误消息
     *
     * @param code 状态码
     * @param msg 返回内容
     * @return 警告消息
     */
    public static ResponseWrapper error(int code, String msg)
    {
        return new ResponseWrapper(code, msg, null);
    }

    /**
     * 方便链式调用
     *
     * @param key 键
     * @param value 值
     * @return 数据对象
     */
    @Override
    public ResponseWrapper put(String key, Object value)
    {
        super.put(key, value);
        return this;
    }

}
